GitHub Actions で Artifacts v4 が一般利用可能になりました
こんにちは、CX 事業本部 Delivery 部の若槻です。
GitHub Actions では、ジョブの完了後にデータの永続的な保管を可能にする方法として Artifacts という Actions が提供されています。これにより GitHub が提供するストレージ領域にビルドの成果物などのコンテンツを保管できます。
そしてこのたび、Artifacts の Version 4 が新しく一般利用可能になりました。
変更内容
v4 のリリースに伴う変更内容は @actions/upload-artifact
および ``@actions/download-artifact` の README でそれぞれ確認可能です。
v3 からのそれぞれの改善点および破壊的変更は以下のようになります。
改善点
- アップロード
- アップロード速度が最大 90 % 向上
- アップロード後に Artifacts ID が返され、Artifacts を UI および REST API ですぐに利用可能
- アップロードされた Artifacts のコンテンツを後続のジョブで変更不可
- Artifacts の圧縮レベルを指定可能
- ダウンロード
- ダウンロード速度が最大 90 % 向上
- PAT の使用により他のワークフロー実行およびリポジトリから Artifact のダウンロードが可能
破壊的変更
- アップロード
- Self-hosted Runner ではファイアウォールルールの変更が必要となる場合がある
action/upload-artifact@v3
以下のバージョンで作成された Artifacts はダウンロード不可
- ダウンロード
- Self-hosted Runner ではファイアウォールルールの変更が必要となる場合がある
- 同じ名前の Artifacts を同一ワークフロー実行内で複数回アップロード不可
- ジョブごとにアップロード可能な Artifacts の数が 10 に制限
試してみた
アップロード/ダウンロード
次のような別のジョブ間で Artifacts をアップロード/ダウンロードによりやり取りするワークフローを試してみます。
name: Artifacts Example on: workflow_dispatch jobs: upload-artifact: runs-on: ubuntu-latest steps: - name: Create Artifact run: echo "Hello World" > test.txt - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: my-artifact path: test.txt download-artifact: runs-on: ubuntu-latest needs: upload-artifact steps: - name: Download Artifact uses: actions/download-artifact@v4 with: name: my-artifact - name: Read Artifact run: | echo "$ ls" ls echo "$ cat test.txt" cat test.txt
ワークフローを実行すると、Artifacts のアップロードとダウンロードが行えていることが分かります。
同一ワークフロー実行内で同じ Artifacts 名で複数回アップロードできない
同じファイルを同一ワークフロー実行内で複数回アップロードしてみます。その時に Artifacts 名が異なる場合と同じ場合で試してみます。
name: Artifacts Example on: workflow_dispatch jobs: upload-artifact: runs-on: ubuntu-latest steps: - name: Create Artifact run: echo "Hello World" > test.txt - name: Upload Artifact uses: actions/upload-artifact@v4 with: name: my-artifact path: test.txt upload-artifact-2: runs-on: ubuntu-latest needs: upload-artifact steps: - name: Upload Artifact with diffrence name uses: actions/upload-artifact@v4 with: name: my-artifact-2 path: test.txt - name: Upload Artifact with same name uses: actions/upload-artifact@v4 with: name: my-artifact path: test.txt
すると、異なる名前の場合は正常にアップロードできましたが、同一の名前の場合は Conflict エラーが発生しました。
Error: Failed to CreateArtifact: Received non-retryable error: Failed request: (409) Conflict: an artifact with this name already exists on the workflow run
v3 以前とは異なり v4 ではこのような挙動となるため場合によってはワークフローの修正が必要になります。
おわりに
GitHub Actions で Artifacts v4 が一般利用可能になったのでご紹介しました。
v3 以前に対していくつかの破壊的変更はありますが、アップロードおよびダウンロード速度が最大 90% 向上するのは、ワークフロー実行の実行時間削減に繋がる大きなメリットだと思うので、ぜひ v4 への移行を検討してみてください。
参考
以上